package com.tjcd.project.library_base.common.utils;

import android.os.Handler;
import android.view.View;

/**
 * @Author jiangKunKun
 * @CreateDate 2024/10/23
 * @Description 多次点击的防抖动工具
 * @SpittingGrooves
 */
public class DebounceUtil {
    private static final int DEFAULT_DEBOUNCE_TIME = 2000; // 默认2秒
    private static final Handler handler = new Handler();
    private static Runnable resetRunnable;
    private static boolean isProcessing = false;

    static {
        resetRunnable = new Runnable() {
            @Override
            public void run() {
                isProcessing = false;
            }
        };
    }

    /**
     * 设置按钮点击事件并添加防抖功能
     *
     * @param view       需要设置点击事件的视图
     * @param listener   点击事件的监听器
     * @param debounceMs 防抖时间（毫秒）
     */
    public static void setOnClickListener(View view, View.OnClickListener listener, int debounceMs) {
        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (!isProcessing) {
                    isProcessing = true;
                    listener.onClick(v);
                    handler.removeCallbacks(resetRunnable);
                    handler.postDelayed(resetRunnable, debounceMs);
                }
            }
        });
    }

    /**
     * 设置按钮点击事件并添加默认防抖功能
     *
     * @param view      需要设置点击事件的视图
     * @param listener  点击事件的监听器
     */
    public static void setOnClickListener(View view, View.OnClickListener listener) {
        setOnClickListener(view, listener, DEFAULT_DEBOUNCE_TIME);
    }
}
